package ch4oopexer1;

/*3：重写之前公司的案例
 公司有公司名称，注册地址，电话，经营范围等属性，公司有很多员工（暂用数组表示），
 员工有姓名，年龄，性别，职务，薪水等属性，
 公司有招聘员工，有输出员工信息，以及辞退员工，和统计公司人数的方法
用oo的思想模拟，相关类用构造方法初始化。*/
public class Company {
    String name;
    String address;
    String phone;
    String range;
    Staff[] staffarr = new Staff[3];
    int account = 0;

    public Company(String name, String address, String phone, String range) {
        this.name = name;
        this.address = address;
        this.phone = phone;
        this.range = range;

    }

    //招聘//(这里可以做的更细致一些：不允许招聘同名的人（可以来一个方法做判断，然后拿着判断的结果来看是否应该添加）)
    public boolean add(Staff staff) {//

        if( account > staffarr.length-1){//所以在这里离考虑先判断（注意有时候要先考虑条件不成立的时候）
            return false;//还有就是当添加的人数超过数组人数时，越界了也会不成功
        }else if (staffarr[account] == null ) {
            staffarr[account] = staff;
            if(account<staffarr.length){
                boolean isRepead =checkRepead(staffarr[account].staffName);
                if(isRepead==true){
                    return false;//名字重复就不会成功
                }
            account++;
            return true;
            }
        }
        return false;
    }

    //显示信息（公司有公司名称，注册地址，电话，经营范围等属性，公司有很多员工（暂用数组表示），
    // 员工有姓名，年龄，性别，职务，薪水等属性，）
    public void show() {

        System.out.println("公司名称：" + name + " ,公司注册地址" + address + " ，公司电话：" + phone
                + " ，公司经营范围：" + range);
        System.out.println("公司内员工信息如下：");
        for (int i = 0; i < account; i++) {
            System.out.println("员工姓名：" + staffarr[i].staffName + " ，员工年龄：" + staffarr[i].age
                    + " ,员工性别：" + staffarr[i].gender + " ,员工职务：" + staffarr[i].duty
                    + " ,员工薪水：" + staffarr[i].salary);
        }
    }

    //开除
    public void dismiss(String staffName) {
         boolean isdiss =false;
        for (int j = 0; j < account ; j++) {
            if (staffarr[j].staffName.equals(staffName)){
                staffarr[j] = staffarr[j + 1];
                isdiss=true;
                break;
            }
        }
        if(isdiss==true){
            staffarr[account - 1] = null;
            account--;
        }else{
            System.out.println("没有人哦删除不了！");
        }


    }
    //获取公司总人数
    public int getNum() {
        return account;
    }

    /*4:在上一题的基础上,实现查找薪水最高的员工的方法,方法声明如下:
    public Emp findTopSalary()*/
    public Staff findTopSalary(){//存在问题926最大为第三个6！！！(出现这种情况是因为我之前写的是用i与i+1作比较！！！应该用i和max比较呀！！
        //犯病了！？？？？？// )//做完后思考一下，为什么会出现这样的问题！！！！！！！！
        double max=staffarr[0].salary;//这个考虑不全面，当没有人的时候，就会空指针
        int index = 0;
        for(int i=0;i<account;i++){
            if(staffarr[i].salary>=max){
                max=staffarr[i].salary;
                index = i;
            }
        }
        return staffarr[index];
    }

   /* 5:在上一题的基础上,实现薪水从高到低排序,方法声明如下:
    public void sortBySalDesc()*/
   public void sortBySalDesc(){
       for(int i=0;i<account-1;i++){
           for(int j=0;j<account-1-i;j++){//员工有姓名，年龄，性别，职务，薪水等属性，(还不如定义一种放方法swap)
               if(staffarr[j].salary<staffarr[j+1].salary) {
                   double salaryTemp = staffarr[j].salary;
                   staffarr[j].salary = staffarr[j + 1].salary;
                   staffarr[j + 1].salary = salaryTemp;
                   //名字换一下
                  // swap(staffarr[j].staffName,staffarr[j + 1].staffName);//这样换是换不成功的
                   String sNameTemp = staffarr[j].staffName;
                   staffarr[j].staffName = staffarr[j + 1].staffName;
                   staffarr[j + 1].staffName = sNameTemp;

                   //性别换一下：
                  // swap( staffarr[j].gender ,staffarr[j + 1].gender);//这样换是换不成功的
                   String genderTemp = staffarr[j].gender;
                   staffarr[j].gender = staffarr[j + 1].gender;
                   staffarr[j + 1].gender = genderTemp;

                   //年龄换一下
                   //swap(staffarr[j].age ,staffarr[j + 1].age);//这样换是换不成功的
                   int ageTemp = staffarr[j].age;
                   staffarr[j].age = staffarr[j + 1].age;
                   staffarr[j + 1].age = ageTemp;

                   //职务换一下
                 //  swap(staffarr[j].duty , staffarr[j + 1].duty);//这样换是换不成功的
                   String dutyTemp = staffarr[j].duty;
                   staffarr[j].duty = staffarr[j + 1].duty;
                   staffarr[j + 1].duty = dutyTemp;
               }
           }
       }
       show();
   }

   public void swap(String m,String n){
       String temp = m;
       m = n;
       n= temp;
   }

   public void swap(int m ,int n){
       int intTemp = m;
       m=n;
       n=intTemp;
    }

    //当出现重复的名字是返回false
    public boolean checkRepead(String staffName){
       for(int i=0;i<account;i++){
           if(staffName.equals(staffarr[i].staffName)){
               return  true;
           }
       }
       return false;
    }
}
